package main

import (
	"errors"
	"fmt"
)

func main() {
	res, err := ResultWithError(0) // 利用多值返回接受结果与错误
	if err != nil {                // 有错误返回的分支
		fmt.Println(err)
		return
	}
	fmt.Println(res) //正确获得结果的分支
}

// ResultWithError 具有异常捕获的函数转换为错误返回
func ResultWithError(i int) (res int, err error) { //具名返回函数
	defer func() { //利用defer进行延迟执行recover，并将异常转换成error
		if er := recover(); er != nil {
			res = 0
			err = errors.New("panic error")
		}
	}()
	a := [0]int{}
	res = a[i] //这里访问空数组的i下标进行数组越界异常等同于执行panic函数
	return
}
